package org.example.springwebmvc;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/request") //类路径
@RestController()
public class RequestController {

    @RequestMapping("/hello") // 方法路径
    public String say(){
        return "你好呀";
    }

    @RequestMapping("/r1")
    public String r1(String name){
        return "接收参数, name: "+name;
    }

    @RequestMapping("/r2")
    public String r2(Integer name){ // 传递参数 要使用包装类型而不是基本类型
        return "接收参数, name: "+name;
    }

    @RequestMapping("/r3")
    public String r3(int name){
        return "接收参数, name: "+name;
    }

//    传递对象
    @RequestMapping("/r4")
    public String r4(Student student){
        return "接收学生参数信息: student: "+student;
    }

//    后端参数重命名
    @RequestMapping("/r5")
    public String r5(@RequestParam("name") String username){
//        使⽤ @RequestParam 来重命名前后端的参数值  并且 参数一定要传递
        return "接收参数, name: "+username;
    }

    @RequestMapping("/r6")
    public String r6(@RequestParam(value = "name",required = false) String username) {
        return "参数重命名 不需要传参数!";
    }

//    传递数组
    @RequestMapping("/r7")
    public String r7(int[] arr){
        return "接收数组: "+ Arrays.toString(arr);
    }

//    传递集合  需要使用 @RequestParam
//    使用 @RequestParam注解可以将HTTP请求参数绑定到控制器方法的参数上
    @RequestMapping("/r8")
    public String r8(@RequestParam List<String> list){
        return "接收集合: "+list;
    }

//    接收 JSON
    @RequestMapping("/r9")
    public String r9(Student student){
        return "接收json格式: "+student;
    }

    @RequestMapping("/m9")
    public String getfile(@RequestPart("file") MultipartFile file) throws IOException{
        //获取⽂件名称
        String fileName = file.getOriginalFilename();
        //⽂件上传到指定路径
        file.transferTo(new File("D:/" + file.getOriginalFilename()));
        return "接收到⽂件名称为: "+fileName;
    }

}
